There are a variety of different applications that can use memory circuits including, but not limited to, programmable integrated circuits, programmable logic devices (PLDs), and System on Chip (SoC) devices. Some SoC devices can include programmable logic that is similar to programmable logic provided by various PLDs. PLDs are a type of programmable integrated circuit (IC) that can be programmed to perform specified logic functions. One type of PLD, the field programmable gate array (FPGA), can include an array of programmable tiles. These programmable tiles comprise various types of logic blocks, which can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay locked loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect (PCI), PCI Express (PCIe) and Ethernet, and so forth. Some devices include enough components and functionality to effectively serve as an entire computer system on a single IC chip. Devices with such functionality are sometimes referred to as SoCs.
SoCs are one type of application in which multiple masters may share a common physical memory and I/O. One way in which the masters can share memory is through the use of virtual memory. Each master can operate within its own virtual address space that is mapped to the physical address space. A memory management unit (MMU) circuit can be configured to translate virtual addresses into physical addresses. The translation can be a significant bottleneck to efficiency.